Quiero filtrar y obtener elementos específicos según el ID de categoría, donde uso el método "dónde" y el operador "==".
Tengo esta colección de Firestore llamada "tarea", donde los documentos se dividen por ID de usuario y cada documento para un usuario contiene una variedad de tareas diferentes. La estructura se ve aquí: Ingrese la descripción de la imagen aquí
Así es como agrego las tareas de matriz para un usuario en la colección de tareas:
const addToFirebase = async() => { if(dataFetch) { await setDoc(doc(db, "task", `${firebase.auth().currentUser.uid}`), { tasks: tasks }, {merge: true}); } }Y así es como he intentado hacer mi consulta que no funciona:
const getFilteredTasks = async() => { const collectionRef = collection(db, "task", `${firebase.auth().currentUser.uid}`, "tasks"); const q = query(collectionRef, where("categoryID", "==", item.id)); console.log('outside snapshot') console.log(item.id) const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.data()); console.log('inside snapshot') }); }Cuando se llama a la función anterior, registra la "instantánea externa" y el item.id correcto, que es el ID de categoría para cada tarea, pero no registra el doc.data() ni la "instantánea interna".
Configuró su consulta como si cada tarea fuera un documento separado en una colección, pero según la captura de pantalla y la forma en que configura los datos, solo tiene un documento por usuario. Ese documento contiene todas las tareas individuales. Entonces, para acceder a eso, obtendría el documento y usaría el código del lado del cliente para usar las partes de los datos que le interesan:
const getFilteredTasks = async () => { const docRef = doc(db, 'task', `${firebase.auth().currentUser.uid}`); const snapshot = await getDoc(docRef); const data = snapshot.data(); if (!data) { return []; } else { return data.tasks.filter(task => task.categoryID === item.id); } }